# -*- coding:utf-8 -*-

from operacoes_list_utils import *
from random import expovariate

class Usuario():
    proximo_peer_externo = 0 #[?] Pra que serve?

    def __init__(self, arquivo, classe, nome, blocos=None):
        self.nome = nome
        self.classe = classe
        self.blocos = blocos if blocos is not None else arquivo
        self.blocos_faltam = [b for b in arquivo if b not in self.blocos]
        self.chegada = None
        self.virou_seed = None
        self.saiu = None
        self.rodada_entrou = None
        self.rodada_saiu = None

        #interface grafica
        self.blocos_novos = []

    def __repr__(self):
        if self.classe == 'peer':
            return '(e{3}) {0}.{1} Blocos={2}'.format(self.classe, self.nome, self.blocos, self.rodada_entrou)
        if self.classe == 'seed':
            return '(e{2} s{3}) {0} {1}'.format(self.classe, self.nome, self.rodada_entrou, self.rodada_saiu) 

        return '{0} {1}'.format(self.classe, self.nome) 

    @classmethod
    def equal(cls, u1, u2):
        return u1.classe == u2.classe and u1.nome == u2.nome

    def blocos_candidatos_upload(self, peer):
        """Bloco que self tem e o peer não tem (interseção)
        """

        #Sabendo que seed.blocos == ARQUIVO e publisher.blocos == ARQUIVO
        #intersecao(ARQUIVO, blocos) == blocos
        if self.classe == 'seed' or self.classe == 'publisher':
            return peer.blocos_faltam

        return intersecao(self.blocos, peer.blocos_faltam)

    def proximo_evento(self, taxa):
        """Geração do próximo evento do usuário (exponencial)
        """
        return expovariate(lambd=taxa)







    


